<?php defined('SYSPATH') OR die('No direct access allowed.');

class Aluno_Controller extends Crud_Controller {

	protected $form_criar = array(
	        'nome'				=> '',
	        'data_nasc'			=> '',
	        'rg'				=> '',
			'cpf'				=> '',
			'estado'			=> 'PI',
			'fone'				=> '',
			'sexo'				=> '',
			'escola'			=> '',
			'responsavel'		=> '',
			'logradouro'		=> '',
			'bairro'			=> '',
			'email'				=> '',
			'periodo_ingresso'	=> '',
			'forma_ingresso'	=> '',
	);
	protected $form_criar_csv = array(
	        'arquivocsv'		=> '',
	        'mat_ano'			=> '',
	        'mat_let'			=> '',
			'mat_ini'			=> '',
	);
	
	public function __construct(){
		parent::__construct(); // This must be included
	}

	public function index(){
		url::redirect('sa/aluno/listar');
	}

	public function listar($pg_num=0, $msg=""){
		$total_items = ORM::factory('aluno')->count_all();
		$this->pagination = new Pagination(array(
	        'base_url'    => 'sa/aluno/listar/', // Set our base URL to controller 'items' and method 'page'
	        'uri_segment' => 'listar', // Our URI will look something like http://domain/items/page/19
	        'total_items' => $total_items // Total number of items.
		));
		$offset = $this->pagination->sql_offset;
		$itens_por_pagina = $this->pagination->items_per_page;
		$alunos = ORM::factory('aluno')->find_all($itens_por_pagina,$offset);
		$this->create_view('sa/aluno/list');
		$this->view->alunos = $alunos;
		$this->view->msg = $msg;
		$this->view->pagination = $this->pagination;
		$this->view->cabecalho->title .= '::Listar';
		$this->view->render(TRUE);
	}

	public function criar($msg=""){
		$this->create_view('sa/aluno/criar');
		$periodos = ORM::factory('periodo')->select_list('id', 'ano');
		$forma_ingressos = ORM::factory('forma_ingresso')->select_list('id', 'nome');
		$this->view->msg = $msg;
		$this->view->form = $this->form_criar;
		$this->view->periodos = $periodos;
		$this->view->forma_ingresso = $forma_ingressos;
		$this->view->sexo = Kohana::lang('sexo');
		$this->view->estado = Kohana::lang('estado');
		$this->view->cabecalho->title .= '::Criar';
		$this->view->render(TRUE);
	}
	
	public function criar_csv($msg=""){
		$forma_ingresso = ORM::factory('forma_ingresso')->select_list('id', 'nome');
		$forma_desligamento = ORM::factory('forma_desligamento')->select_list('id', 'nome');
		$this->create_view('sa/aluno/criar_csv');
		$this->view->forma_ingresso = $forma_ingresso;
		$this->view->forma_desligamento = $forma_desligamento;
		$this->view->msg = $msg;
		$this->view->form = $this->form_criar_csv;
		$this->view->cabecalho->title .= '::Criar';
		$this->view->render(TRUE);
	}
	
	public function validar_csv(){
		$post = Validation::factory(array_merge($_FILES, $_POST));
		$erros = $this->form_criar_csv;
		$post->pre_filter('trim');
		$post->pre_filter('strtoupper', 'mat_let');
		$post->add_rules('*', 'required');
		$post->add_rules('arquivocsv', 'upload::valid', 'upload::required[arquivocsv]', 'upload::type[csv]', 'upload::size[1M]');
		$post->add_rules('mat_ano', 'length[2]', 'digit');
		$post->add_rules('mat_let', 'length[1]');
		$post->add_rules('mat_ini', 'digit');
		if ($post->validate())	{
			// Temporary file name
			$filename = upload::save('arquivocsv', $_FILES['arquivocsv']['name']);
			//echo 'arquivo criado: '.$filename;
			$mat_ano			= $this->input->post('mat_ano');
			$mat_let			= strtoupper($this->input->post('mat_let'));
			$mat_ini			= $this->input->post('mat_ini');
			$alunos = $this->importar_cvs($filename, $mat_ano, $mat_let, $mat_ini);
			//echo 'matriculas no formato: '.$mat_ano.$mat_let. ' iniciando de '.$mat_ini;
			$this->create_view('sa/aluno/validar_csv');
			$this->view->alunos = $alunos;
			$this->view->arquivocsv = $filename;
			$this->view->mat_ano = $mat_ano;
			$this->view->mat_let = $mat_let;
			$this->view->mat_ini = $mat_ini;
			$this->view->cabecalho->title .= '::Validar CSV';
			$this->view->render(TRUE);
		}else{
			$this->form_criar_csv = arr::overwrite($this->form_criar_csv, $post->as_array());
			$erros = arr::overwrite($erros, $post->errors('aluno'));
			$msg = '';
			foreach($erros as $erro){
				$msg .= $erro;
			}
			$this->criar_csv($msg);
		}		
	}

	public function editar($msg=""){
		$validation = new Validation($this->input->post());
		$validation->add_rules('aluno_id','required');
		if(!$validation->validate()){
			url::redirect('sa/aluno/listar/');
		}
		$alunos_id = $this->input->post('aluno_id');
		$alunos = array();
		foreach ($alunos_id as $id){
			$alunos[] = ORM::factory('aluno', $id);
		}
		$periodos = ORM::factory('periodo')->select_list('id', 'ano');
		$forma_ingressos = ORM::factory('forma_ingresso')->select_list('id', 'nome');
		$forma_desligamentos = ORM::factory('forma_desligamento')->select_list('id', 'nome');
		$this->create_view('sa/aluno/editar');
		$this->view->msg = $msg;
		$this->view->alunos = $alunos;
		$this->view->periodos = $periodos; //@todo corrigir o periodo de ingresso que não está dendo atualizado de acordo com os dados do usuario
		$this->view->forma_ingresso = $forma_ingressos;
		$this->view->forma_desligamento = $forma_desligamentos;
		$this->view->sexo = Kohana::lang('sexo');
		$this->view->estado = Kohana::lang('estado');
		$this->view->cabecalho->title .= '::Editar';
		$this->view->render(TRUE);
	}
	
	public function deletar($msg=""){
		$validation = new Validation($this->input->post());
		$validation->add_rules('aluno_id','required');
		if(!$validation->validate()){
			url::redirect('sa/aluno/listar/');
		}
		$alunos_id = $this->input->post('aluno_id');
		$alunos = array();
		foreach ($alunos_id as $id){
			$alunos[] = ORM::factory('aluno', $id);
		}
		$this->create_view('sa/aluno/deletar');
		$this->view->msg = $msg;
		$this->view->alunos = $alunos;
		$this->view->cabecalho->title .= '::Deletar';
		$this->view->render(TRUE);
	}

	public function ver(){
		$validation = new Validation($this->input->post());
		$validation->add_rules('aluno_id','required');
		if(!$validation->validate()){
			url::redirect('sa/aluno/listar/');
		}
		$alunos_id = $this->input->post('aluno_id');
		$alunos = array();
		foreach ($alunos_id as $id){
			$alunos[] = ORM::factory('aluno', $id);
		}
		$this->create_view('sa/aluno/ver');
		$this->view->alunos = $alunos;
		$this->view->cabecalho->title .= '::Ver';
		$this->view->render(TRUE);
	}
	
	public function salvar(){
		$acao = $this->input->post('acao');
		switch ($acao){
			case 'criar':
				$this->salvar_criar();
				break;
					
			case 'editar':
				$this->salvar_editar();
				break;
				
			case 'deletar':
				$this->salvar_deletar();
				break;
					
			case 'criar_csv':
				$this->salvar_criar_csv();
				break;
				
			default:
				break;
		}
	}

	private function salvar_criar(){
		$nome				= $this->input->post('nome');
		$data_nasc			= $this->input->post('data_nasc');
		$rg					= $this->input->post('rg');
		$cpf				= $this->input->post('cpf');
		$estado				= $this->input->post('estado');
		$fone				= $this->input->post('fone');
		$sexo				= $this->input->post('sexo');
		$escola				= $this->input->post('escola');
		$responsavel		= $this->input->post('responsavel');
		$logradouro			= $this->input->post('logradouro');
		$bairro				= $this->input->post('bairro');
		$email				= $this->input->post('email');
		$periodo_ingresso	= $this->input->post('periodo_ingresso');
		$forma_ingresso		= $this->input->post('forma_ingresso');
		$regras_aluno = ORM::factory('aluno_negocio');
		if($regras_aluno->checarUsernameRepetido($alunoname)){
			url::redirect('aluno/criar/'.Kohana::lang('aluno.e_usuario_existente'));
		}
		$validation = new Validation($this->input->post());
		$validation->pre_filter('trim', TRUE);
		$validation->add_rules('alunoname','required', 'length[3,45]', 'alpha');
		$validation->add_rules('password', 'required', 'length[6,45]', 'alpha', 'matches[repassword]');
		$validation->add_rules('repassword', 'required', 'length[6,45]', 'alpha');
		$validation->add_rules('roles', 'required');
		if(!$validation->validate()){
			$msg = '';
			$erros = $validation->errors('form_error_messages');
			foreach($erros as $erro){
				$msg .= $erro;
			}
			$form = $validation->as_array();
			$this->create_view('aluno/criar');
			$this->view->msg = $msg;
			$this->view->roles = ORM::factory('auth_role')->select_list('id', 'name');
			$this->view->form = $form;
			$this->view->cabecalho->title .= '::Criar';
			$this->view->render(TRUE);
		}else{
			$aluno = ORM::factory('aluno');
			$aluno->alunoname = $alunoname;
			$aluno->password = md5($password);
			$aluno->active = $active;
			$aluno->deleted= 0;
			$aluno->auth_roles  = array($roles);
			$aluno->save();
			url::redirect('aluno/criar/'.Kohana::lang('aluno.i_salvo_sucesso'));
		}
	}

	private function salvar_editar(){// @todo validação dos dados
		$id 		= $this->input->post('id');
		$nome				= $this->input->post('nome');
		$data_nasc			= $this->input->post('data_nasc');
		$rg					= $this->input->post('rg');
		$cpf				= $this->input->post('cpf');
		$estado				= $this->input->post('estado');
		$fone				= $this->input->post('fone');
		$sexo				= $this->input->post('sexo');
		$escola				= $this->input->post('escola');
		$responsavel		= $this->input->post('responsavel');
		$logradouro			= $this->input->post('logradouro');
		$bairro				= $this->input->post('bairro');
		$email				= $this->input->post('email');
		$periodo_ingresso	= $this->input->post('periodo_ingresso');
		$forma_ingresso		= $this->input->post('forma_ingresso');
		$periodo_desligamento	= $this->input->post('periodo_desligamento');
		$forma_desligamento	= $this->input->post('forma_desligamento');
		$resultmsg = "";
		for ($i=0;$i<count($id); $i++){
			$aluno = ORM::factory('aluno', $id[$i]);
			$aluno->nome					= $nome[$i];
			$aluno->data_nasc				= $data_nasc[$i];
			$aluno->rg						= $rg[$i];
			$aluno->cpf						= $cpf[$i];
			$aluno->estado					= $estado[$i];
			$aluno->fone					= $fone[$i];
			$aluno->sexo					= $sexo[$i];
			$aluno->escola					= $escola[$i];
			$aluno->responsavel				= $responsavel[$i];
			$aluno->logradouro				= $logradouro[$i];
			$aluno->bairro					= $bairro[$i];
			$aluno->email					= $email[$i];
			$aluno->periodo_ingresso		= $periodo_ingresso[$i];
			$aluno->forma_ingresso			= $forma_ingresso[$i];
			$aluno->periodo_desligamento	= $periodo_desligamento[$i];
			$aluno->forma_desligamento		= $forma_desligamento[$i];
			$aluno->save();
			$resultmsg .= Kohana::lang('aluno.i_editado_sucesso', $nome[$i]);
		}
		url::redirect('sa/aluno/listar/0/'.$resultmsg);
	}
	
	private function salvar_deletar(){
		$id 		= $this->input->post('id');
		$resultmsg = "";
		for ($i=0;$i<count($id); $i++){
			$aluno = ORM::factory('aluno', $id[$i]);
			$nome  = $aluno->nome;
			$aluno->delete();
			$resultmsg .= Kohana::lang('aluno.i_deletado_sucesso', $nome);
		}
		url::redirect('sa/aluno/listar/0/'.$resultmsg);
	}
	
	private function importar_cvs($arquivocsv, $mat_ano, $mat_let, $mat_ini){
		$mat_reg = new Regras_Aluno();
		$row = $mat_ini;
		$handle = fopen ($arquivocsv,"r");
		$alunos = array();
		while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
			$mat_num = str_pad($row, 4, '0', STR_PAD_LEFT);
			$mat_dig = $mat_reg->gerar_digito_matricula($mat_ano.$mat_let.$mat_num);
		    $row++;
		    $aluno = ORM::factory('aluno');
		    $aluno->matricula = $mat_ano.$mat_let.$mat_num.$mat_dig;
		    $aluno->nome = utf8_encode($data[0]);
		    $aluno->data_nasc = $data[1];
		    $aluno->rg = $data[2];
		    $aluno->cpf = $data[3];
		    $aluno->estado = $data[4];
		    $aluno->fone = $data[5].$data[6];
		    $aluno->sexo = $data[7];
		    $aluno->escola = utf8_encode($data[9]);
		    $aluno->responsavel = utf8_encode($data[10]);
		    $aluno->logradouro = utf8_encode($data[11]);
		    $aluno->bairro = utf8_encode($data[12]);
		    $aluno->email = $data[13];
		    $aluno->periodo_ingresso = $data[8];
		    $aluno->periodo_desligamento=1;
		    $aluno->forma_ingresso=0;
		    $aluno->forma_desligamento=1;

		    //echo $aluno->matricula."::".$aluno->nome."<br />";
		    //$aluno->save();
		    $alunos[] = $aluno;
		}
		fclose ($handle);
		return $alunos;
	}

} // End Welcome Controller